// function 声明式定义
function fn(a:number, b:number):number{
    return a + b;
}

// 字面量
// 1. 完整写法
const f1:(a:number, b:number)=>number = function (a:number,b:number):number{
    return a + b;
}

// 2. 简写：类型推断
const f2 = function (a:number, b:number):number{
    return a + b;
}


// 在非严格模式下，undefined null 是任何类型的子类型，可以给任何类型赋值
let a:number = undefined;
let obj:object = null;
obj = {username:'atguigu'}

// 参数
// 1. ? 可选参数
function f3(a:number, b?:number):number{
    return a + b ? b : 1;
}

f3(1); // 报错： 应有 2 个参数，但获得 1 个

// 2. 默认参数
function f4(a:number, b:number = 4):number{
    return a + b;
}
f4(1);
f4(1, 5);

// 3. 剩余参数：
function sum(a:number,b:number, ...arg:number[]):number{
    console.log('arg:', arg);
    let total:number = 0;
    total += a;
    total += b;
    total = arg.reduce((pre,cur)=>pre + cur, total);
    return total;
}

sum(1,2,3,4,5,6,7);
export {}